package br.uvv.sao.dao;

import java.util.List;

import org.hibernate.criterion.Criterion;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Restrictions;

import br.uvv.sao.domain.PalavraChave;
import br.uvv.sao.util.DAOException;

public class PalavraChaveDAO extends DAO {
	
	private static final long serialVersionUID = -9074685838487837017L;

	public void salvar(PalavraChave palavraChaveInstance) throws DAOException {
		save(palavraChaveInstance, palavraChaveInstance.getId());
	}
	
	public void excluir(PalavraChave palavraChaveInstance) throws DAOException {
		delete(PalavraChave.class, palavraChaveInstance.getId());
	}

	public PalavraChave selecionar(Long id) throws DAOException {
		return (PalavraChave) get(PalavraChave.class, id);
	}
	
	@SuppressWarnings("unchecked")
	public List<PalavraChave> listar(String nome) throws DAOException {
		Criterion[] filtros = new Criterion[1];
		if (nome!= null)
			filtros[0] = Restrictions.ilike("nome", "%" + nome + "%");
		return list(PalavraChave.class, null, Order.asc("id"), filtros);
	}

	@SuppressWarnings("unchecked")
	public List<PalavraChave> listar(int first, int pageSize, String sortField,
			boolean sortOrder, String varBuscaCodigo, String varBuscaDescricao) throws DAOException {
		Criterion[] filtros = {
			Restrictions.ilike("codigo", "%" + varBuscaCodigo +  "%"),
			Restrictions.ilike("descricao", "%" + varBuscaDescricao +  "%")
		};
		return listPaginator(first, pageSize, sortField, sortOrder, PalavraChave.class, null, filtros);
	}

	@SuppressWarnings("unchecked")
	public List<PalavraChave> listar() throws DAOException {
		return list(PalavraChave.class, null);
	}

	public Integer findByNomeCount(String nome) throws DAOException {
		Criterion[] filtros = {
				Restrictions.ilike("nome", nome)
			};
		return rowCount(PalavraChave.class, filtros);
	}
}